# @Time    :2025/3/26 17:05
"""
list1 = [1, 2, 3，[100, 200, 300]]
在子列表添加一个元素400，要求是在不影响原来的列表
"""
import copy

# def c(var1):
#     list1[3].append(400)
# #    print(list1)
#     print("函数追加400之后：", list1,id(list1))
#
#
# list1 = [1, 2, 3,[100, 200, 300]]
# print("函数处理之前list1：",list1,id(list1))
# c(list1)
# print("函数处理之后list1：",list1,id(list1))

"""

"""

#
# def c(var1):
#     list2[3].append(400)
#     print("3函数追加400之后：", list2, id(list2))
#
#
# list1 = [1, 2, 3, [100, 200, 300]]
# print("1函数处理之前list1：", list1, id(list1))
#
#
# # list2 = list1.copy()  # list1的值也被修改了，跟你list2一样了，不符合要求。
# # print(id(list1[3]))
# # print(id(list2[3]))#地址没变是因为子列表只是拷贝了地址，并没有重新复制一份子列表，使用deepcope就可以重新复制出一份新的子列表，那地址就是不一样的
#
#
#
# list2 = copy.deepcopy(list1)
# print(id(list1[3]))
# print(id(list2[3]))#使用deepcope就可以重新复制出一份新的子列表，那地址就是不一样的
#
# list2 = copy.copy(list1)#这样写也不行，copy就是浅拷贝，只会copy一份地址出来，并不会重新复制子列表的数据出来
#
# print("2函数处理之前list2：", list2, id(list2))
# c(list2)
# print("4函数处理之后list1：", list1, id(list1))


"""
重新写一份新的代码
"""


# def c(var1):
#     print("函数内修改列表前：", var1, id(var1))
#     list2[3].append(400)
#     print("3函数追加400之后：", list2, id(list2))
#     print("3函数追加400之后：", var1, id(var1))
#
# list1 = [1, 2, 3, [100, 200, 300]]
# print("1函数处理之前list1：", list1, id(list1))
# list2 = copy.deepcopy(list1)
# print("2函数处理之前list2：", list2, id(list2))
# c(list2)
# print("4函数处理之后list1：", list1, id(list1))
#

import copy
def change_list(m_list):
    """当前函数演示了deepcopy"""
    print(f"函数内修改列表前列表地址:{id(m_list)},列表中的元素:{m_list}")
    m_list[3].append(400)
    print(f"函数内修改列表后列表地址:{id(m_list)},列表中的元素:{m_list}")

list1 = [600,2,3,[100,200,300]]
print(f"函数外列表地址:{id(list1)},列表中的元素:{list1}")
# 浅拷贝
# list2 = list1.copy()
# 深拷贝
list2 = copy.deepcopy(list1)
print(list1[0],id(list1[0]))
print(id(list2[0]))
# change_list(list2)
print(f"函数外调用函数后列表地址:{id(list1)},列表中的元素:{list1}")

help(change_list)





